package com.estar.assistsurvy.utils;

import java.io.ByteArrayOutputStream;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class ImageUtils {

	public static  Bitmap getPathBitmap(String path,int dw, int dh)
	{
		/*
		 * 在通过BitmapFactory.decodeFile(String path)方法将突破转成Bitmap时，
		 * 遇到大一些的图片，我们经常会遇到OOM(Out Of Memory)的问题。
		 * 所以用到了BitmapFactory.Options这个类。
		 */
		BitmapFactory.Options options = new BitmapFactory.Options();
		//是可以不将图片读取到内存中，但可以获得其宽度和高度
		options.inJustDecodeBounds = true ;
		//获取尺寸信息
		Bitmap pic = BitmapFactory.decodeFile(path, options);
		//获取比例大小
		int w = (int) Math.ceil(options.outWidth/(float)dw);
		int h = (int) Math.ceil(options.outHeight/(float)dh);
		 //如果超出指定大小，则缩小相应的比例
		if(w>1 || h >1)
		{
			if(w>h)
			{
				options.inSampleSize = w ;
			}else if(w < h)
			{
				//设置压缩比，即将图片缩小为原来的1/h
				options.inSampleSize = h ;
			}
		}
		//一定要将该参数设置为false
		options.inJustDecodeBounds = false ;
		pic = BitmapFactory.decodeFile(path, options);
		
		return pic ;
	}
	
	
	public static byte[] compressBitmap(String path)
	{
		/**
		 * 将图片进行固定宽度和高度的压缩，
		 * 第一个参数是图片的存储路径，
		 * 第二个参数是需要压缩到的宽度
		 * 第三个参数是需要压缩到的高度
		 */
		Bitmap image = getPathBitmap(path, 300, 300);
		
		//以下代码为质量压缩代码
		
		ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
		
		int options = 100;  
		//压缩图片，第一个参数是压缩后的格式，第二个参数是压缩比100 100% 是不压缩，第三个参数是压缩后的数据存放的容器
	    image.compress(Bitmap.CompressFormat.JPEG, options, baos);//质量压缩方法，这里100表示不压缩，把压缩后的数据存放到baos中
        
        while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩      
            baos.reset();//重置baos即清空baos  
            options -= 10;//每次都减少10  
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%，把压缩后的数据存放到baos中 
           
        }  
       /* ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片  
	    ByteArrayOutputStream out = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);*/
		
		return baos.toByteArray() ;
	}
	

}
